home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / basic / qbnws104.zip / FOSSIL.ZIP / FOSSIL2.BAS < prev   
BASIC Source File  |  1990-07-29  |  20KB  |  739 lines

  1. DECLARE SUB Parser (Parse$, Params%, Arg$())
  2. DECLARE SUB Terminal (ComPort%, AnsiHand%, Baud$, HandShake%, Echo%, LineFeeds%, Reg AS ANY)
  3. DECLARE SUB AnsiPrint (AnsiHand%, Send$)
  4. DECLARE SUB FossilDeInit (ComPort%, Reg AS ANY)
  5. DECLARE SUB FossilInit (ComPort%, Reg AS ANY)
  6. DECLARE SUB Recieve (ComPort%, Send%, Reg AS ANY)
  7. DECLARE SUB SetDtr (ComPort%, DtrStatus$, Reg AS ANY)
  8. DECLARE SUB SetHandShake (ComPort%, HandShake%, Reg AS ANY)
  9. DECLARE SUB SetPortParams (ComPort%, Baud$, Bits%, Stops%, Parity$, Reg AS ANY)
  10. DECLARE SUB Status (ComPort%, Info%, Reg AS ANY)
  11. DECLARE SUB Transmit (ComPort%, Send%, Reg AS ANY)
  12. DECLARE SUB BaudSelect (ComPort%, AnsiHand%, Baud$, Bits%, Stops%, Parity$, Reg AS ANY)
  13.  
  14.  
  15. ' *****************
  16. ' ** Fossil.Bas  **
  17. ' *****************
  18. '
  19. ' $INCLUDE: 'QB.BI'                      ' Include Data Types for INTERRUPT calls
  20.  
  21. Version$ = "Fossil Version 2.00a"        ' Program version stamp
  22. VersionDate$ = "July 29th, 1990"
  23.                                  
  24. DIM SHARED Reg AS RegType                ' Used for INTERRUPT calls
  25. DIM Arg$(20)                             ' Used for command line parser
  26.  
  27. CrLf$ = CHR$(&HD) + CHR$(&HA)            ' A Carriage return + linefeed string
  28.  
  29. Baud$ = "9600"
  30. HandShake% = 2
  31. ComPort% = 0
  32. Echo% = 0
  33.  
  34. LOCATE , , 1                     ' Turn curser on
  35.  
  36. CALL AnsiPrint(AnsiHand%, CHR$(27) + "[2J")   ' Clear the screen
  37. CALL AnsiPrint(AnsiHand%, CrLf$ + Version$ + CrLf$)
  38. CALL AnsiPrint(AnsiHand%, "By Chris Wagner " + VersionDate$ + CrLf$ + CrLf$)
  39.  
  40. Parse$ = UCASE$(COMMAND$)         ' Get command line paramaters
  41. CALL Parser(Parse$, Params%, Arg$())
  42. FOR Counter1% = 1 TO Params%
  43.     SELECT CASE LEFT$(Arg$(Counter1%), 3)
  44.  
  45.     CASE "-BD"  ' Set baud rate
  46.         Baud$ = RIGHT$(Arg$(Counter1%), LEN(Arg$(Counter1%)) - 3)
  47.         CALL AnsiPrint(AnsiHand%, "Setting Baud rate set to " + Baud$ + CrLf$)
  48.  
  49.     CASE "-CP" ' Set COM port
  50.         ComPort% = VAL(RIGHT$(Arg$(Counter1%), LEN(Arg$(Counter1%)) - 3)) - 1
  51.         SELECT CASE ComPort%
  52.         CASE 0 TO 3
  53.             CALL AnsiPrint(AnsiHand%, "Using Comminications port COM" + LTRIM$(STR$(ComPort% + 1)) + CrLf$)
  54.         CASE ELSE
  55.             ComPort% = 0
  56.             CALL AnsiPrint(AnsiHand%, "Invalid Communications port parameter:  " + Arg$(Counter1%) + CrLf$)
  57.             CALL AnsiPrint(AnsiHand%, "Using Comminications port COM1" + CrLf$)
  58.         END SELECT
  59.  
  60.     CASE "-HS" ' Set handshake type
  61.         HandShake$ = UCASE$(RIGHT$(Arg$(Counter1%), LEN(Arg$(Counter1%)) - 3))
  62.         HandShake% = VAL("&H" + HandShake$)
  63.         IF HandShake% > &HF THEN
  64.             CALL AnsiPrint(AnsiHand%, "Bad HandShake Enable parameter:  " + LTRIM$(STR$(HandShake%)) + CrLf$)
  65.         END IF
  66.  
  67.     CASE "-LR" ' Add linefeeds to received carriage returns
  68.         LineFeeds% = LineFeeds% OR 1
  69.  
  70.     CASE "-LT" ' Add linefeeds to transmitted carriage returns
  71.         LineFeeds% = LineFeeds% OR 2
  72.  
  73.     CASE "-EC" ' Set local echo on or off
  74.         Echo$ = UCASE$(RIGHT$(Arg$(Counter1%), LEN(Arg$(Counter1%)) - 3))
  75.         Echo% = VAL(LEFT$(Echo$, 1))
  76.  
  77.     CASE ELSE
  78.         CALL AnsiPrint(AnsiHand%, "Invalid Parameter: " + CHR$(34) + Arg$(Counter1%) + CHR$(34) + CrLf$)
  79.     END SELECT
  80. NEXT Counter1%
  81.  
  82. CALL Terminal(ComPort%, AnsiHand%, Baud$, HandShake%, Echo%, LineFeeds%, Reg)      ' The terminal itself
  83.  
  84. CALL AnsiPrint(AnsiHand%, CHR$(27) + "[2J")          ' Clear the screen
  85.  
  86. AnsiHand% = -1
  87. CALL AnsiPrint(AnsiHand%, "")
  88.  
  89. CALL FossilDeInit(ComPort%, Reg)
  90.  
  91. END
  92.  
  93. SUB AnsiPrint (AnsiHand%, Send$)
  94.  
  95. SELECT CASE AnsiHand%
  96.     CASE 0
  97.     AnsiHand% = FREEFILE
  98.     OPEN "CONS:" FOR OUTPUT AS #AnsiHand%
  99.     CASE -1
  100.     CLOSE #AnsiHand%
  101.     AnsiHand% = 0
  102.     EXIT SUB
  103.     CASE ELSE
  104. END SELECT
  105.  
  106. PRINT #AnsiHand%, Send$;
  107.  
  108. END SUB
  109.  
  110. SUB BaudSelect (ComPort%, AnsiHand%, Baud$, Bits%, Stops%, Parity$, Reg AS RegType)
  111.  
  112. CrLf$ = CHR$(&HD) + CHR$(&HA)
  113.  
  114. CALL AnsiPrint(AnsiHand%, CrLf$)
  115. CALL AnsiPrint(AnsiHand%, "Current baud rate:  " + Baud$ + CrLf$)
  116. CALL AnsiPrint(AnsiHand%, CrLf$)
  117. CALL AnsiPrint(AnsiHand%, "Select a baud rate:" + CrLf$)
  118. CALL AnsiPrint(AnsiHand%, "   A.    300" + CrLf$)
  119. CALL AnsiPrint(AnsiHand%, "   B.    600" + CrLf$)
  120. CALL AnsiPrint(AnsiHand%, "   C.   1200" + CrLf$)
  121. CALL AnsiPrint(AnsiHand%, "   D.   2400" + CrLf$)
  122. CALL AnsiPrint(AnsiHand%, "   E.   4800" + CrLf$)
  123. CALL AnsiPrint(AnsiHand%, "   F.   9600" + CrLf$)
  124. CALL AnsiPrint(AnsiHand%, "   G.  19200" + CrLf$)
  125. CALL AnsiPrint(AnsiHand%, "   H.  38400" + CrLf$)
  126. CALL AnsiPrint(AnsiHand%, "   Q.  No Change" + CrLf$)
  127. CALL AnsiPrint(AnsiHand%, CrLf$)
  128.  
  129. WHILE INKEY$ <> "": WEND  ' Clear the keyboard buffer
  130.  
  131. DO
  132.     SELECT CASE UCASE$(INKEY$)
  133.     CASE ""
  134.     CASE "A"
  135.         Baud$ = "300"
  136.         EXIT DO
  137.     CASE "B"
  138.         Baud$ = "600"
  139.         EXIT DO
  140.     CASE "C"
  141.         Baud$ = "1200"
  142.         EXIT DO
  143.     CASE "D"
  144.         Baud$ = "2400"
  145.         EXIT DO
  146.     CASE "E"
  147.         Baud$ = "4800"
  148.         EXIT DO
  149.     CASE "F"
  150.         Baud$ = "9600"
  151.         EXIT DO
  152.     CASE "G"
  153.         Baud$ = "19200"
  154.         EXIT DO
  155.     CASE "H"
  156.         Baud$ = "38400"
  157.         EXIT DO
  158.     CASE "Q"
  159.         CALL AnsiPrint(AnsiHand%, "Baud not changed" + CrLf$)
  160.         CALL AnsiPrint(AnsiHand%, CrLf$)
  161.         EXIT SUB
  162.     CASE ELSE
  163.     END SELECT
  164. LOOP
  165.  
  166. CALL SetPortParams(ComPort%, Baud$, Bits%, Stops%, Parity$, Reg)
  167. CALL AnsiPrint(AnsiHand%, "Baud changed to:  " + Baud$ + CrLf$)
  168.  
  169. END SUB
  170.  
  171. SUB FossilDeInit (ComPort%, Reg AS RegType)
  172.  
  173. ' Release the FOSSIL device driver (Call when finished)
  174. '
  175. ' ah = &H05    Fossil Function Number - DeInitialize FOSSIL driver
  176. ' al = &H00    Place Holder
  177. ' dx = Communications port number (0-3)
  178.  
  179. Reg.ax = &H500
  180. Reg.dx = ComPort%
  181. CALL Interrupt(&H14, Reg, Reg)
  182.  
  183. END SUB
  184.  
  185. SUB FossilInit (ComPort%, Reg AS RegType)
  186.  
  187. ' Initialize the FOSSIL device driver
  188. '
  189. ' dx = Communications port number (0-3)
  190. ' ah = &H04    Fossil Function Number - Initialize FOSSIL driver
  191. '                                       (Raises DTR in the porcess)
  192.  
  193. Reg.dx = ComPort%
  194. Reg.ax = &H400
  195. CALL Interrupt(&H14, Reg, Reg)
  196.  
  197. IF Reg.ax <> &H1954 THEN
  198.     CLS
  199.     PRINT
  200.     PRINT "ERROR:  Fossil Driver not responding - READ MANUAL!"
  201.     PRINT "You may need to add DEVICE={path}\X00.SYS for proper operation"
  202.     PRINT "    (Note:  {path} means the drive:\path where the file is located"
  203.     PRINT
  204.     SLEEP (5)
  205.     END
  206. END IF
  207.  
  208. END SUB
  209.  
  210. '    DECLARE SUB Parser (Parse$, Params%, Arg$())
  211. '
  212. '    DIM Arg$(50)
  213. '    CLS
  214. '
  215. '    Parse$ = "    1a 2bb 3ccc   4dddd   5eeeee 6ffffff     "
  216. '
  217. '    CALL Parser(Parse$, Params%, Arg$())
  218. '
  219. '    FOR Counter1% = 1 TO Params%
  220. '          PRINT Counter1%, CHR$(34) + Arg$(Counter1%) + CHR$(34)
  221. '    NEXT Counter1%
  222. '
  223. '   Argument splitter by Chris Wagner
  224. '   call with:
  225. '
  226. '        Parse$ = input to be divided
  227. '
  228. '   Returns:
  229. '        Params%   Number of parameters
  230. '        Arg$()    Array of arguments, starting at 1
  231. '
  232. '
  233. SUB Parser (Parse$, Params%, Arg$())
  234.  
  235. Params% = 0
  236. Temp$ = RTRIM$(Parse$)
  237.  
  238. DO
  239.     Temp$ = LTRIM$(Temp$)
  240.     IF LEN(Temp$) = 0 THEN EXIT DO
  241.     Temp% = INSTR(Temp$, SPACE$(1))
  242.  
  243.     IF Temp% = 0 THEN
  244.     Params% = Params% + 1
  245.     Arg$(Params%) = Temp$
  246.     EXIT DO
  247.     END IF
  248.  
  249.     Arg$(Params% + 1) = RTRIM$(LEFT$(Temp$, Temp%))
  250.     Temp$ = RIGHT$(Temp$, LEN(Temp$) - Temp%)
  251.     IF LEN(Arg$(Params% + 1)) > 0 THEN Params% = Params% + 1
  252. LOOP
  253.  
  254. END SUB
  255.  
  256. SUB Recieve (ComPort%, Send%, Reg AS RegType)
  257.  
  258. CALL Status(ComPort%, Info%, Reg) ' Test for space in OUTPUT buffer
  259.  
  260. IF (Info% AND &H4) = 0 THEN
  261.     IF (Info% AND &H2) = &H2 THEN
  262.     ' ah = &H02      Fossil Function Number - Recieve Character
  263.     ' al = &H00      Place Holder
  264.     ' dx = Communications port (0-3)
  265.     Reg.ax = &H200
  266.     Reg.dx = ComPort%
  267.     CALL Interrupt(&H14, Reg, Reg)
  268.     Send% = Reg.ax
  269.       ELSE
  270.     Send% = -1 ' No Characters in input buffer
  271.     END IF
  272.   ELSE ' Input buffer over-run
  273.     Send% = -2
  274.     ' ah = &H0A      Fossil Function Number - Purge INPUT Buffer
  275.     ' al = &H00      Place Holder
  276.     ' dx = Communications port (0-3)
  277.     Reg.ax = &HA00
  278.     Reg.dx = ComPort%
  279.     CALL Interrupt(&H14, Reg, Reg)
  280.     CLS
  281.     PRINT
  282.     PRINT " *** Input buffer over-run."
  283.     PRINT "     Buffer purged."
  284.     PRINT
  285.     SLEEP (5)
  286. END IF
  287.  
  288. END SUB
  289.  
  290. SUB SetDtr (ComPort%, DtrStatus$, Reg AS RegType)
  291.  
  292. ' ah =